/*
 * Kinetics.h
 *
 *  Created on: 23 Jul 2011
 *      Author: Allan
 */

#ifndef KINETICS_H_
#define KINETICS_H_

// Eigen includes
#include <Eigen/Core>
using namespace Eigen;

// GeoReact forward declarations
class Reaction;

class Kinetics
{
public:
	virtual ~Kinetics() {}
	
	virtual const double KineticRate(const Reaction& reaction, double T, double P, const VectorXd& n, const VectorXd& a) const = 0;
	
	virtual const VectorXd DerivativeKineticRate(const Reaction& reaction, double T, double P, const VectorXd& n, const VectorXd& a) const = 0;
};

class ZeroKinetics : public Kinetics
{
public:
	virtual ~ZeroKinetics() {}
	
	virtual const double KineticRate(const Reaction& reaction, double T, double P, const VectorXd& n, const VectorXd& a) const { return 0.0; };
	
	virtual const VectorXd DerivativeKineticRate(const Reaction& reaction, double T, double P, const VectorXd& n, const VectorXd& a) const { return VectorXd::Zero(n.rows()); };
};

#endif /* KINETICS_H_ */
